import numpy as np
import wave
import subprocess
import os
import base64

def create_real_mp3():
    # 生成16kHz单声道16位正弦波音频
    sample_rate = 16000
    duration = 3  # 3秒
    frequency = 440  # A4音符
    
    # 生成音频数据
    t = np.linspace(0, duration, int(sample_rate * duration), False)
    audio_data = np.sin(2 * np.pi * frequency * t)
    
    # 转换为16位整数
    audio_data = (audio_data * 32767).astype(np.int16)
    
    # 先创建WAV文件
    wav_file = "temp_audio.wav"
    with wave.open(wav_file, 'w') as wav:
        wav.setnchannels(1)  # 单声道
        wav.setsampwidth(2)  # 16位
        wav.setframerate(sample_rate)  # 16kHz
        wav.writeframes(audio_data.tobytes())
    
    # 使用ffmpeg转换为MP3（如果可用）
    mp3_file = "test_real_audio.mp3"
    try:
        # 尝试使用ffmpeg转换
        result = subprocess.run([
            'ffmpeg', '-i', wav_file, '-acodec', 'mp3', 
            '-ar', '16000', '-ac', '1', '-ab', '128k', 
            '-y', mp3_file
        ], capture_output=True, text=True)
        
        if result.returncode == 0:
            print(f"成功创建真正的MP3文件: {mp3_file}")
            
            # 验证文件信息
            file_size = os.path.getsize(mp3_file)
            print(f"文件大小: {file_size} 字节")
            
            # 计算Base64编码后的大小
            with open(mp3_file, 'rb') as f:
                audio_bytes = f.read()
                base64_data = base64.b64encode(audio_bytes).decode('utf-8')
                base64_size = len(base64_data)
                print(f"Base64编码后大小: {base64_size} 字符")
                print(f"Base64编码后大小: {base64_size / 1024 / 1024:.2f} MB")
                
                # 检查是否超过4MB限制
                if base64_size < 4 * 1024 * 1024:
                    print("✓ Base64编码后大小符合讯飞API要求（<4MB）")
                else:
                    print("✗ Base64编码后大小超过讯飞API限制（4MB）")
        else:
            print(f"ffmpeg转换失败: {result.stderr}")
            print("请确保已安装ffmpeg")
            
    except FileNotFoundError:
        print("未找到ffmpeg，无法创建真正的MP3文件")
        print("请安装ffmpeg或使用其他方法创建MP3文件")
    
    # 清理临时文件
    if os.path.exists(wav_file):
        os.remove(wav_file)

if __name__ == "__main__":
    create_real_mp3()